//package com.temple.intercept;
//
//import com.alibaba.fastjson.JSONObject;
//import com.temple.common.constants.ErrorCode;
//import com.temple.common.constants.JwtConstant;
//import com.temple.common.redis.TUserReisInfo;
//import com.temple.common.result.ResultBody;
//import com.temple.common.utils.JwtUtils;
//import io.jsonwebtoken.Claims;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.http.HttpStatus;
//import org.springframework.web.servlet.ModelAndView;
//import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
//
//@Slf4j
//public class LoginInterceptor extends HandlerInterceptorAdapter {
//
//
//	/**
//	 * 定义一个线程域，存放登录用户
//	 */
//	private static final ThreadLocal<TUserReisInfo> t1 = new ThreadLocal<>();
//
//
//	/**
//	 * * 在业务处理器处理请求之前被调用
//	 * * 如果返回false
//	 * *      则从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链
//	 * * 如果返回true
//	 * *      执行下一个拦截器，直到所有拦截器都执行完毕
//	 * *      再执行被拦截的Controller
//	 * *      然后进入拦截器链
//	 * *      从最后一个拦截器往回执行所有的postHandle()
//	 *
//	 * @param request
//	 * @param response
//	 * @param handler
//	 * @return
//	 * @throws Exception
//	 */
//	@Override
//	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//
//		String token = request.getHeader("token");
//
//		log.debug("=================GET TOKEN:{}", token);
//		log.error("=================请求地址：{}",request.getRequestURI());
//
//		Claims claims = JwtUtils.parseJWT(token, JwtConstant.USRE_TOKEN_SERCRET);
//		//1.查询token
//		if (StringUtils.isBlank(token) || claims.isEmpty()) {
//			//2.未登录，返回401
//			ResultBody result = ResultBody.failed().code(ErrorCode.UNAUTHORIZED.getCode()).path(request.getRequestURI()).httpStatus(HttpStatus.UNAUTHORIZED.value());
//			response.getWriter().append(JSONObject.toJSONString(result));
//			return false;
//		}
//		//3.有token，查询用户信息
//		TUserReisInfo account = new TUserReisInfo();
//		account.setUserId(Long.valueOf(claims.getId()));
//		account.setUserName(claims.getSubject());
//		//4.放入线程域
//		t1.set(account);
//		//增加token时长
//		return true;
//	}
//
//
//
//
//	/**
//	 * 在业务处理器处理请求执行完成后，生成视图之前执行的动作
//	 * 可在modelAndView中加入数据，比如当前时间
//	 *
//	 * @param request
//	 * @param response
//	 * @param handler
//	 * @param modelAndView
//	 * @throws Exception
//	 */
//	@Override
//	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//		super.postHandle(request, response, handler, modelAndView);
//	}
//
//	/**
//	 * 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等
//	 * 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion()
//	 *
//	 * @param request
//	 * @param response
//	 * @param handler
//	 * @param ex
//	 * @throws Exception
//	 */
//	@Override
//	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//		//防止内存泄漏
//		t1.remove();
//	}
//
//	public static TUserReisInfo getLoginUser() {
//		return t1.get();
//	}
//}
